import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class MathExercises04 {
    public static void main(String[] args) {
        Random random = new Random();
        int exerciseCount = 50; // 习题数量
        int maxNumber = 100; // 最大数值限制
        int perLine = 5; // 每行显示算式数量

        Set<String> exercises = new HashSet<>(); // 使用集合存储算式，避免重复
        int addCount = 0; // 记录加法算式的数量
        int subCount = 0; // 记录减法算式的数量
        int lineCount = 0; // 记录当前行输出的算式数量

        while (exercises.size() < exerciseCount) {
            int num1 = random.nextInt(maxNumber) + 1;
            int num2 = random.nextInt(maxNumber) + 1;
            int operation = random.nextInt(2); // 随机选择加法或减法
            int answer;
            String exercise = null;

            if (operation == 0 && subCount < exerciseCount / 2) { // 减法
                if (num1 < num2) {
                    int temp = num1;
                    num1 = num2;
                    num2 = temp;
                }   //确保结果不是负数
                answer = num1 - num2;
                exercise = String.format("%d - %d = %d", num1, num2, answer);
            } else if (addCount < exerciseCount / 2) { // 加法
                num2 = Math.min(num2, maxNumber - num1); // 确保和不超过100
                answer = num1 + num2;
                exercise = String.format("%d + %d = %d", num1, num2, answer);
            }

            if (exercise != null && exercises.add(exercise)) { // 如果集合中未包含该算式，则添加
// 仅在成功添加后递增对应的计数器
                if (operation == 0 && subCount < exerciseCount / 2) {
                    subCount++;
                } else if (addCount < exerciseCount / 2) {
                    addCount++;
                }

// 控制换行
                if (lineCount > 0 && lineCount % perLine == 0) {
                    System.out.println(); // 换行
                }
// 打印算式，判断是否需要在末尾添加换行符
                System.out.print(exercise + (((lineCount + 1) % perLine == 0) ? "\n" : " "));
                lineCount++; // 增加当前行的算式计数
            }
        }

// 检查并打印最后一行之后的换行符
        if (lineCount % perLine != 0) {
            System.out.println();
        }

// 打印生成的算式数量
        System.out.println("总共生成的算式数量: " + exercises.size());
        System.out.println("加法算式数量: " + addCount);
        System.out.println("减法算式数量: " + subCount);
    }
}